Пауль Хоровиц - Искусство схемотехники. Том 3 [Изд.4-е]
Самый верный способ напрасно потерять время и запутаться раньше, чем вы сделаете что-нибудь полезное — это начать программировать, не определив заранее, что именно вам надо. Это особенно справедливо, если вы программируете прикладной контроллер на языке ассемблера, потому что программа на языке ассемблера сама по себе не отличается ясностью построения, которую ей дает структурированный язык высокого уровня; более того, желая оптимизировать действия программы в реальном времени, вы вынуждены прибегать к разного рода хитроумным приемам и относительно туманным алгоритмам. В результате ваша программа — с переходами и ветвлениями, с разделением функций между главной программой и обработчиками прерываний, с программными флагами, модифицируемыми в самых неожиданных местах, с управляющими байтами для периферийных устройств и многим другим - ваша программа быстро превращается в ужасающую мешанину, особенно если на полдороги вы все еще не представляете целиком свою задачу. Как и при покраске дома, приготовления могут занять больше времени, чем сама работа, но в итоге оказываются оправданными.
Разрабатываемый нами усреднитель сигналов является удачным примером. Он не относится к числу очень сложных приборов, однако беглый взгляд на структурную схему обработчика прерываний, приведенную на рис. 11.21, должен убедить вас, что не так уж просто разобраться в установке и чтении флагов и сигналов, изменении векторов прерываний в реальном времени и вообще в порядке выполнения программных строк. Так что стоит потратить время и разобраться, как же должен функционировать наш прибор.
Что такое усреднитель сигналов? Усреднитель сигналов, иногда называемый многоканальным накопителем, предназначен для повышения качества (т. е. увеличения отношения сигнал/шум) периодического аналогового сигнала, неизбежно смешанного с непериодическим шумом (или сигналами помех). Повышение качества осуществляется путем измерения значений сигнала много раз в течение каждого периода, занесения этих выборочных значений в набор последовательных «ящиков» или каналов и затем сложения в каждом канале соответствующих выборок от многих периодов входного сигнала. Другими словами, сигнал складывается сам с собой по модулю его периода. Как будет показано в разд. 15.13, такая процедура повышает отношение сигнал/шум для сигнала, накапливающегося в каналах, потому что суммарное значение (периодического) сигнала растет линейно со временем, а флуктуации (случайного) шума растут только как квадратный корень из времени. Будем называть каждый последовательный период накопления значений в ячейках «разверткой»; типичный сеанс накопления данных может состоять из нескольких тысяч разверток.
Хороший усреднитель сигналов постоянно показывает на экране дисплея накопленную форму сигнала (хранящуюся в 1000 или около того каналов) и предоставляет вам широкий выбор ширины каналов («задержки на ячейку»), режимов запуска, масштаба изображения и т. д. Многие из этих возможностей мы реализуем в нашей разработке, однако далеко не все, иначе описание прибора выйдет за рамки главы. Из всего многообразия возможностей мы отобрали набор функций, который позволит продемонстрировать весь диапазон программных приемов и компромиссных решений, но и не даст нам унестись на крыльях мечты в царство идеальных усреднителей сигналов.
Характеристики. По причинам, которые будут описаны позже, мы решили снабдить прибор обычной управляющей (передней) панелью с надписанными переключателями вместо того, чтобы использовать современную методику с клавиатурой и экранными меню. В результате наш усреднитель выглядит, как обычный прибор такого рода, а его органы управления имеют предопределенные функции и диапазоны. Продумывая план этой главы, мы в действительности начали с того же, с чего начинаем сейчас - с выбора реализуемых функций и диапазонов настройки.
Мы решили ограничиться фиксированным числом каналов (256) с широким диапазоном их ширин. Поскольку усреднитель сигналов используется для исследования периодических явлений двух видов - с собственным внутренним периодом (например, океанские приливы) и запускаемых периодически нами (например, нервные импульсы или резонансные явления), мы предусмотрели два режима развертки: с внешним запуском, когда прибор ждет внешнего сигнала, чтобы начать цикл развертки, и с автозапуском, когда циклы развертки следуют друг за другом непрерывно. Далее, мы предусмотрели два способа завершения процедуры усреднения сигнала: по определенному заранее числу разверток и по нажатию на кнопку «стоп». В последнем случае усреднение завершается после окончания очередной развертки. Для наблюдения усредненного сигнала на экране ЭЛТ (с непрерывным обновлением изображения) мы формируем аналоговые X и Y сигналы (вместе с сигналом подсветки Z). При этом масштаб изображения можно изменять в широких пределах умножением на 2n; имеется также режим «автомасштабирования», в котором данные непрерывно пересчитываются (нормализуются) в соответствии с числом выполненных разверток. Наконец, на управляющую панель выведены ЭЛД, индицирующие состояние (ожидание, развертка) и логические выходные сигналы, характеризующие наличие развертки и конец развертки. Ниже приведены характеристики нашего усреднителя сигналов.
Диапазон аналогового входного сигнала: ±5В
Число каналов: 256
Внутреннее представление: 32-разрядные целые со знаком
Ширина канала: от 100 мкс до 1 с, с интервалами 1-2-5
Накопление: конечное суммирование (сумма 100 мкс-выборок)
Определяемое заранее число разверток: от 1 до 20000, с интервалами 1-2-5
Режимы развертки: внешний запуск; периодический (автозапуск)
Режимы наблюдения: с выбором масштаба (изображение, выходящее за верхнюю границу экрана, переносится вниз); с автомасштабированием
Масштаб изображения: от 1 до 16К входного диапазона, ступенями с умножением на 2
Входы: аналоговый сигнал, внешний запуск развертки
Выходы: X, Y, Z (на ЭЛТ), РАЗВЕРТКА, КОНЕЦ
Дополнительное управление: ПУСК, СТОП, СБРОС (перезагрузка)
На рис. 11.15 показаны входные и выходные сигналы микропроцессорной платы.
Рис. 11.15. Входные, выходные и управляющие сигналы усреднителя сигналов. «ЭЛД» обозначает порт индикации (см. рис. 11.10); «А», «В» и «С» относятся к битам параллельного порта 8536.
Для всех цифровых сигналов мы использовали параллельный порт 8536, причем направление и полярность сигналов соответствующим образом программируются; все цифровые входы, на которые поступают сигналы от органов управления, должны быть подключены через резисторы к уровню +5 В и заземляться при замыкании ключа. В схемах устранения дребезга нет необходимости, поскольку дребезг мы устраним программно.
Аналоговый фильтр имеет особое значение и заслуживает некоторых пояснений. Если вы получаете короткие периодические выборки значений непрерывного аналогового сигнала с частотным спектром конечной ширины (при максимальной частоте, присутствующей в сигнале, f, вы сохраняете входную информацию лишь если выборки следуют с частотой 2fмакс и более. Если же этот критерий Найквиста не удовлетворяется, происходят странные вещи; конкретно, на рис. 11.16 показано явление возникновения побочной низкочастотной составляющей в результате субдискретизации, когда частоты, близкие к частоте дискретизации fд, отображаются на низкочастотную область. Для устранения этого явления входной сигнал следует пропускать через низкочастотный фильтр с граничной частотой fд/2 или меньше.
Рис. 11.16. Возникновение побочной низкочастотной составляющей в результате субдискретизации.
Это вроде бы просто, но как быть с тем обстоятельством, что ширина канала и, следовательно, частота дискретизации в нашем усреднителе перестраивается? Можно установить на входе регулируемый фильтр низких частот (например, фильтр с коммутируемыми конденсаторами и программно управляемой тактовой частотой) и настраивать его согласно ширине канала; это допустимо, так как если вы выбираете большую ширину канала, высокие частоты вас все равно не интересуют. Однако можно поступить проще. Заметьте, что при интегрировании (усреднении) сигнала в течение ширины канала вы получаете низкочастотный фильтр с автоматической регулировкой. По этой причине на входе усреднителя сигналов иногда устанавливают преобразователь напряжения в частоту (микросхема высокой степени интеграции). Мы используем, в сущности, тот же подход: дискретизация аналогового входного сигнала всегда осуществляется на частоте 10 кГц (при этом для устранения наложения спектров входной сигнал фильтруется низкочастотным фильтром с граничной частотой 5 кГц, соответствующей частоте дискретизации); при больших периодах дискретизации осуществляется эффективное интегрирование сигнала за счет сложения соответствующего числа последовательных отсчетов. На рис. 11.17 показано, как могла бы выглядеть передняя панель прибора.